/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ppsa.logic;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import com.ppsa.bean.ArchivoBean;
import com.ppsa.bean.AsignacionBean;
import com.ppsa.bean.DocumentoBean;
import com.ppsa.bean.FormatoBean;
import com.ppsa.bean.PerfilBean;
import com.ppsa.bean.ResultadoBean;
import com.ppsa.bean.ReunionBean;
import com.ppsa.bean.UsuarioBean;
import com.ppsa.common.Constantes;
import com.ppsa.common.Util;
import com.ppsa.dao.AsignacionDao;
import com.ppsa.dao.DocumentoDao;
import com.ppsa.dao.PerfilDao;
import com.ppsa.dao.ReunionDao;
import com.ppsa.dao.TareaDao;
import com.ppsa.dao.UsuarioDao;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.ObjectUtils;
import org.apache.log4j.Logger;
import org.bouncycastle.*;
/**
 *
 * @author AdminTdp
 */
public class MantenimientoLogic {
    static final Logger m_log = Logger.getLogger(MantenimientoLogic.class.getName());
    
    private static final String INPUT_FILENAME = "d:\\pdf\\166.pdf";
    private static final String OUTPUT_FILENAME = "d:\\pdf\\aaaa.pdf";
    private static final String USER_PASSWORD = "";
    private static final String OWNER_PASSWORD = "foobar";
    
    public Object cargarDatos(HttpServletRequest request, String strA_pagina, String strpv_accion, String strpv_codigoBean, UsuarioBean objL_usuarioBeanSession) throws Exception {
        m_log.info("[cargarDatos] << ENTER");

        Object objL_general = new Object();
        PerfilBean objL_perfil = null;
        DocumentoBean objL_documento = null;
        UsuarioBean objL_usuario = null;
        ReunionBean objL_reunion = null;
        MantenimientoLogic objL_mantenimientoLogic = null;
        ConsultaLogic objL_consultaLogic = null;


        if( strA_pagina.equals(Constantes.REF_PAGINA_FORM_PERFIL) ) {
            objL_perfil = new PerfilBean();
            if( strpv_accion.equals("modificar") ) {
                objL_consultaLogic = new ConsultaLogic();
                objL_perfil = objL_consultaLogic.obtenerPerfil(strpv_codigoBean);
            }
            objL_general = objL_perfil;
        }else if( strA_pagina.equals(Constantes.REF_PAGINA_FORM_USUARIO) ) {
            objL_usuario = new UsuarioBean();
            objL_consultaLogic = new ConsultaLogic();
            if( strpv_accion.equals("modificar") ) {
                objL_usuario = objL_consultaLogic.obtenerUsuario(strpv_codigoBean);
            }
            List<PerfilBean> lstL_perfil = new ArrayList<PerfilBean>();
            request.setAttribute("lstL_perfil", objL_consultaLogic.selectPerfil());
            objL_general = objL_usuario;
        }else if( strA_pagina.equals(Constantes.REF_PAGINA_FORM_DOCUMENTO) ) {
            objL_documento = new DocumentoBean();
            if( strpv_accion.equals( "modificar" ) ){
                objL_consultaLogic = new ConsultaLogic();
                m_log.info( "strpv_valorID[ Documento ]-->" + strpv_codigoBean );
                objL_documento = objL_consultaLogic.obtenerDocumento( strpv_codigoBean );
                Integer itemp = Integer.parseInt( objL_documento.getStrpv_codigoVersion() );
                objL_documento.setStrpv_codigoVersion( String.format( "%03d", itemp ) );
                if( "3".equals( ObjectUtils.toString( request.getParameter( "t" ) ) ) ){
                    objL_documento.setStrpv_codigoVersion( String.format( "%03d", itemp + 1 ) );
                }
                objL_documento.setStrpv_tipoModificacion( ObjectUtils.toString( request.getParameter( "t" ) ) );
                request.setAttribute( "lstL_formato", objL_consultaLogic.obtenerListadoFormato( strpv_codigoBean, strpv_codigoBean) );
            }
            objL_consultaLogic = new ConsultaLogic();
            request.setAttribute("lstL_tipoDocumento", objL_consultaLogic.selectTipoDocumento());
            request.setAttribute("hmL_numCopia", Util.ObtenerSelectCopias());
            request.setAttribute("lstL_empresa", objL_consultaLogic.selectEmpresa());
            request.setAttribute("lstL_procedimiento", objL_consultaLogic.selectDocumentoProcedimiento( objL_usuarioBeanSession ) );
            request.setAttribute("hmL_tipoUbicacion", Util.ObtenerSelectTipoUbicacion());
            objL_general = objL_documento;
        }else if( strA_pagina.equals(Constantes.REF_PAGINA_FORM_REUNION) ) {
            objL_reunion = new ReunionBean();
            if( strpv_accion.equals("modificar") ) {
                objL_consultaLogic = new ConsultaLogic();
                objL_reunion = objL_consultaLogic.obtenerReunion(strpv_codigoBean);
                System.out.println("===");
                System.out.println(objL_reunion.getStrpv_codigoReunion());
                System.out.println("===");
            }
            objL_general = objL_reunion;
        }


        request.setAttribute("objL_bean", objL_general );
        m_log.info("[cargarDatos] >> EXIT");
        return request;
        
    }
    
    public Integer actualizarUsuario(UsuarioBean objA_usuarioBean) throws Exception {
        
        UsuarioDao objL_usuarioDao = new UsuarioDao();
        return objL_usuarioDao.actualizarUsuario(objA_usuarioBean);
    }

    public Integer actualizarPerfil(PerfilBean objL_perfil) throws Exception {
        PerfilDao objL_perfilDao = new PerfilDao();
        return objL_perfilDao.actualizarPerfil(objL_perfil);
    }

    public Integer actualizarDocumento(DocumentoBean objA_documentoBean,UsuarioBean objL_usuario) throws Exception {
        DocumentoDao objL_documentoDao = new DocumentoDao();        
        int intL_resultado = objL_documentoDao.actualizarDocumento(objA_documentoBean,objL_usuario);
        System.out.println( "*******************************************////" + intL_resultado );
        if( intL_resultado > 0 ){
               System.out.println( "*******************************************" );
                for( FormatoBean objFormato : objA_documentoBean.getLstpv_formato() ){
                     System.out.println("*/*/*/*/*/2121212122" );
                    objL_documentoDao.actualizarFormato( objFormato, intL_resultado, 1 );
                }
            }
        return intL_resultado;//objL_documentoDao.actualizarDocumento(objA_documentoBean,objL_usuario);
    }
    public ResultadoBean eliminarPerfil(PerfilBean objL_perfil) throws Exception {
        PerfilDao objL_perfilDao = new PerfilDao();
        return objL_perfilDao.eliminarPerfil(objL_perfil);
    }

    public ResultadoBean eliminarDocumento(DocumentoBean objL_documento) throws Exception {      
        return new DocumentoDao().eliminarDocumento(objL_documento);
    }
    
    public Integer actualizarAsignacion(AsignacionBean objL_asignacion)throws Exception {
        return new AsignacionDao().actualizarAsignacion(objL_asignacion);
    }

    public Integer actualizarReunion(ReunionBean objL_reunionBean) throws Exception {
        ReunionDao objL_reunionDao = new ReunionDao();
        return objL_reunionDao.actualizarReunion(objL_reunionBean);
    }
    public HashMap<String,String> validarUsuario(String strpv_nombreUsuario, String strpv_clave) throws Exception{
        UsuarioDao obj = new UsuarioDao();
        return obj.validarUsuario(strpv_nombreUsuario, strpv_clave);
    }

    public ResultadoBean actualizarDocumentoEstado(String strpv_codigoDocumento, String strpv_codigoVersion, String strpv_tipoActualizacion, UsuarioBean objL_usuario ) throws Exception{
         UsuarioDao obj = new UsuarioDao();
        return obj.actualizarDocumentoEstado(strpv_codigoDocumento, strpv_codigoVersion, strpv_tipoActualizacion, objL_usuario);
    }
    
    public DocumentoBean obtenerUrlPDF( String strpv_codigoDocumento, UsuarioBean objL_usuario) throws Exception {
        DocumentoDao objL_documento = new DocumentoDao();
        return objL_documento.obtenerUrlPDF(strpv_codigoDocumento,objL_usuario);
    }

    public Integer eliminarAsignacion(String strpv_codigoAsignacion) throws Exception {
        return new AsignacionDao().eliminarAsignacion(strpv_codigoAsignacion);
    }

    public Integer actualizarPorcentajeAsignacion( String strpv_codigoAsignacion, String strpv_porcentaje, UsuarioBean objL_usuario ) throws Exception {
        return new TareaDao().actualizarPorcentajeAsignacion(strpv_codigoAsignacion, strpv_porcentaje, objL_usuario);
    }
    
    public Integer registrarAsistenciaEmpleado( String strpv_codigoEmpleado, String strpv_codigoReunion) throws Exception {
        return new ReunionDao().registrarAsistenciaEmpleado( strpv_codigoEmpleado, strpv_codigoReunion );
    }
    public void generarPDF(){
    
    PdfReader reader = null;
        FileOutputStream out = null;
        PdfStamper stamper = null;

        try {
            // Define input
            reader = new PdfReader(INPUT_FILENAME);

            // Define output
            out = new FileOutputStream(OUTPUT_FILENAME);

            // Encrypt document
            stamper = new PdfStamper(reader, out);
            stamper.setEncryption(USER_PASSWORD.getBytes(), OWNER_PASSWORD.getBytes(), ~(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING | PdfWriter.HideMenubar ), PdfWriter.STANDARD_ENCRYPTION_40);
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            if( reader != null ){
                try {
                    reader.close();
                } catch ( Exception ex ) {
                    ex.printStackTrace();
                }
            }
            if( stamper != null ){
                try {
                    stamper.close();
                } catch ( Exception ex ) {
                    ex.printStackTrace();
                }
            }
            if( out != null ){
                try {
                    out.close();
                } catch ( Exception ex ) {
                    ex.printStackTrace();
                }
            }
        }
    }
            
            
}
